﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using UygulamaTakbisService.wsTakbisServis;
using System.Data.SqlClient;
using System.Configuration;
using System.Data;
using System.Diagnostics;


namespace UygulamaTakbisService
{
    public class RehinBilgiDao : IDisposable
    {
        TAKBISWebService takbisServis = new TAKBISWebService();

        public bool RehinBilgiKaydet(RehinBilgi rehinBilgi)
        {
            bool sonuc;
            using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["TakbisBilgiSorguLogConnection"].ToString()))
            {
                using (SqlCommand cmd = new SqlCommand())
                {
                    con.Open();
                    SqlTransaction transaction = con.BeginTransaction("trans");
                    try
                    {
                        cmd.CommandText = @"insert into RehinBilgi with(updlock) (RehinBilgiID,RehinMiktar,KrediMiktar,DovizBilgiID,Faiz,RehinTip,KrediTur,MuteselsilMi,TesisIslemBilgiID,TerkinIslemBilgiID,TapuBolumDurum,Sartlar,Aciklama,KayitTarih) values (@RehinBilgiID,@RehinMiktar,@KrediMiktar,@DovizBilgiID,@Faiz,@RehinTip,@KrediTur,@MuteselsilMi,@TesisIslemBilgiID,@TerkinIslemBilgiID,@TapuBolumDurum,@Sartlar,@Aciklama,GETDATE())";

                        if (rehinBilgi.RehinBilgiID != null)
                            cmd.Parameters.Add("@RehinBilgiID", rehinBilgi.RehinBilgiID);
                        else
                            cmd.Parameters.Add("@RehinBilgiID", DBNull.Value);

                        if (rehinBilgi.RehinMiktar != null)
                            cmd.Parameters.Add("@RehinMiktar", rehinBilgi.RehinMiktar);
                        else
                            cmd.Parameters.Add("@RehinMiktar", DBNull.Value);

                        if (rehinBilgi.KrediMiktar != null)
                            cmd.Parameters.Add("@KrediMiktar", rehinBilgi.KrediMiktar);
                        else
                            cmd.Parameters.Add("@KrediMiktar", DBNull.Value);

                        if (rehinBilgi.Doviz != null)
                            cmd.Parameters.Add("@DovizBilgiID", rehinBilgi.Doviz.DovizBilgiID);
                        else
                            cmd.Parameters.Add("@DovizBilgiID", DBNull.Value);

                        if (rehinBilgi.Faiz != null)
                            cmd.Parameters.Add("@Faiz", rehinBilgi.Faiz);
                        else
                            cmd.Parameters.Add("@Faiz", DBNull.Value);

                        if (rehinBilgi.RehinTip != null)
                            cmd.Parameters.Add("@RehinTip", rehinBilgi.RehinTip);
                        else
                            cmd.Parameters.Add("@RehinTip", DBNull.Value);

                        if (rehinBilgi.KrediTur != null)
                            cmd.Parameters.Add("@KrediTur", rehinBilgi.KrediTur);
                        else
                            cmd.Parameters.Add("@KrediTur", DBNull.Value);

                        if (rehinBilgi.MuteselsilMi != null)
                            cmd.Parameters.Add("@MuteselsilMi", rehinBilgi.MuteselsilMi);
                        else
                            cmd.Parameters.Add("@MuteselsilMi", DBNull.Value);

                        if (rehinBilgi.TesisIslem != null)
                            cmd.Parameters.Add("@TesisIslemBilgiID", rehinBilgi.TesisIslem.IslemBilgiID);
                        else
                            cmd.Parameters.Add("@TesisIslemBilgiID", DBNull.Value);

                        if (rehinBilgi.TerkinIslem != null)
                            cmd.Parameters.Add("@TerkinIslemBilgiID", rehinBilgi.TerkinIslem.IslemBilgiID);
                        else
                            cmd.Parameters.Add("@TerkinIslemBilgiID", DBNull.Value);

                        if (rehinBilgi.TapuBolumDurum != null)
                            cmd.Parameters.Add("@TapuBolumDurum", rehinBilgi.TapuBolumDurum);
                        else
                            cmd.Parameters.Add("@TapuBolumDurum", DBNull.Value);

                        if (rehinBilgi.Sartlar != null)
                            cmd.Parameters.Add("@Sartlar", rehinBilgi.Sartlar);
                        else
                            cmd.Parameters.Add("@Sartlar", DBNull.Value);

                        if (rehinBilgi.Aciklama != null)
                            cmd.Parameters.Add("@Aciklama", rehinBilgi.Aciklama);
                        else
                            cmd.Parameters.Add("@Aciklama", DBNull.Value);

                        cmd.Connection = con;
                        cmd.Transaction = transaction;
                        cmd.ExecuteScalar();
                        transaction.Commit();
                        sonuc = true;
                    }
                    catch (Exception ex)
                    {
                        transaction.Rollback();
                        sonuc = false;
                        using (ExceptionLogDao el = new ExceptionLogDao())
                        {
                            el.HataLogYaz(DateTime.Now.ToString() + "  " + ex.ToString());
                        }
                    }
                    finally
                    {
                        con.Close();
                        con.Dispose();
                        cmd.Dispose();
                    }

                    if (sonuc)
                    {
                        //rehinBilgi TesisIslemBilgi Kayıt
                        if (rehinBilgi.TesisIslem != null)
                        {
                            using (IslemBilgiDao islemBilgiDao = new IslemBilgiDao())
                            {
                                if (!islemBilgiDao.IslemBilgiKayitliMi(rehinBilgi.TesisIslem))
                                {
                                    bool tesisIslemBilgiKayitEdildiMi = islemBilgiDao.IslemBilgiKaydet(rehinBilgi.TesisIslem);

                                    if (tesisIslemBilgiKayitEdildiMi = true && !islemBilgiDao.YevmiyeBilgiKayitliMi(rehinBilgi.TesisIslem.Yevmiye))
                                    {
                                        bool tesisYevmiyeBilgiKayitEdildiMi = islemBilgiDao.YevmiyeBilgiKaydet(rehinBilgi.TesisIslem.Yevmiye);
                                    }
                                }
                            }
                        }

                        //rehinBilgi TerkinIslemBilgi Kayıt
                        if (rehinBilgi.TerkinIslem != null)
                        {
                            using (IslemBilgiDao islemBilgiDao = new IslemBilgiDao())
                            {
                                if (!islemBilgiDao.IslemBilgiKayitliMi(rehinBilgi.TerkinIslem))
                                {
                                    bool terkinIslemBilgiKayitEdildiMi = islemBilgiDao.IslemBilgiKaydet(rehinBilgi.TerkinIslem);

                                    if (terkinIslemBilgiKayitEdildiMi = true && !islemBilgiDao.YevmiyeBilgiKayitliMi(rehinBilgi.TerkinIslem.Yevmiye))
                                    {
                                        bool terkinYevmiyeBilgiKayitEdildiMi = islemBilgiDao.YevmiyeBilgiKaydet(rehinBilgi.TerkinIslem.Yevmiye);
                                    }
                                }
                            }
                        }
                    }

                    return sonuc;
                }
            }
        }

        public bool RehinDetayBilgiKaydet(RehinDetayBilgi rehinDetayBilgi, decimal rehinBilgiID)
        {
            bool sonuc;
            using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["TakbisBilgiSorguLogConnection"].ToString()))
            {
                using (SqlCommand cmd = new SqlCommand())
                {
                    con.Open();
                    SqlTransaction transaction = con.BeginTransaction("trans");
                    try
                    {
                        cmd.CommandText = @"insert into RehinDetayBilgi with(updlock) (RehinDetayBilgiID,RehinBilgiID,Derece,SiraNo,TapuBolumDurum,SDFHakkiVarMi,TesisIslemBilgiID,TerkinIslemBilgiID,KayitTarih) values (@RehinDetayBilgiID,@RehinBilgiID,@Derece,@SiraNo,@TapuBolumDurum,@SDFHakkiVarMi,@TesisIslemBilgiID,@TerkinIslemBilgiID,GETDATE())";

                        if (rehinDetayBilgi.RehinDetayBilgiID != null)
                            cmd.Parameters.Add("@RehinDetayBilgiID", rehinDetayBilgi.RehinDetayBilgiID);
                        else
                            cmd.Parameters.Add("@RehinDetayBilgiID", DBNull.Value);

                        if (rehinBilgiID != null)
                            cmd.Parameters.Add("@RehinBilgiID", rehinBilgiID);
                        else
                            cmd.Parameters.Add("@RehinBilgiID", DBNull.Value);

                        if (rehinDetayBilgi.Derece != null)
                            cmd.Parameters.Add("@Derece", rehinDetayBilgi.Derece);
                        else
                            cmd.Parameters.Add("@Derece", DBNull.Value);

                        if (rehinDetayBilgi.SiraNo != null)
                            cmd.Parameters.Add("@SiraNo", rehinDetayBilgi.SiraNo);
                        else
                            cmd.Parameters.Add("@SiraNo", DBNull.Value);

                        if (rehinDetayBilgi.TapuBolumDurum != null)
                            cmd.Parameters.Add("@TapuBolumDurum", rehinDetayBilgi.TapuBolumDurum);
                        else
                            cmd.Parameters.Add("@TapuBolumDurum", DBNull.Value);

                        if (rehinDetayBilgi.SDFHakkiVarMi != null)
                            cmd.Parameters.Add("@SDFHakkiVarMi", rehinDetayBilgi.SDFHakkiVarMi);
                        else
                            cmd.Parameters.Add("@SDFHakkiVarMi", DBNull.Value);

                        if (rehinDetayBilgi.TesisIslem != null)
                            cmd.Parameters.Add("@TesisIslemBilgiID", rehinDetayBilgi.TesisIslem.IslemBilgiID);
                        else
                            cmd.Parameters.Add("@TesisIslemBilgiID", DBNull.Value);

                        if (rehinDetayBilgi.TerkinIslem != null)
                            cmd.Parameters.Add("@TerkinIslemBilgiID", rehinDetayBilgi.TerkinIslem.IslemBilgiID);
                        else
                            cmd.Parameters.Add("@TerkinIslemBilgiID", DBNull.Value);

                        cmd.Connection = con;
                        cmd.Transaction = transaction;
                        cmd.ExecuteScalar();
                        transaction.Commit();
                        sonuc = true;
                    }
                    catch (Exception ex)
                    {
                        transaction.Rollback();
                        sonuc = false;
                        using (ExceptionLogDao el = new ExceptionLogDao())
                        {
                            el.HataLogYaz(DateTime.Now.ToString() + "  " + ex.ToString());
                        }
                    }
                    finally
                    {
                        con.Close();
                        con.Dispose();
                        cmd.Dispose();
                    }

                    if (sonuc)
                    {
                        //rehinDetayBilgi TesisIslemBilgi Kayıt
                        if (rehinDetayBilgi.TesisIslem != null)
                        {
                            using (IslemBilgiDao islemBilgiDao = new IslemBilgiDao())
                            {
                                if (!islemBilgiDao.IslemBilgiKayitliMi(rehinDetayBilgi.TesisIslem))
                                {
                                    bool tesisIslemBilgiKayitEdildiMi = islemBilgiDao.IslemBilgiKaydet(rehinDetayBilgi.TesisIslem);

                                    if (tesisIslemBilgiKayitEdildiMi = true && !islemBilgiDao.YevmiyeBilgiKayitliMi(rehinDetayBilgi.TesisIslem.Yevmiye))
                                    {
                                        bool tesisYevmiyeBilgiKayitEdildiMi = islemBilgiDao.YevmiyeBilgiKaydet(rehinDetayBilgi.TesisIslem.Yevmiye);
                                    }
                                }
                            }
                        }

                        //rehinDetayBilgi TerkinIslemBilgi Kayıt
                        if (rehinDetayBilgi.TerkinIslem != null)
                        {
                            using (IslemBilgiDao islemBilgiDao = new IslemBilgiDao())
                            {
                                if (!islemBilgiDao.IslemBilgiKayitliMi(rehinDetayBilgi.TerkinIslem))
                                {
                                    bool terkinIslemBilgiKayitEdildiMi = islemBilgiDao.IslemBilgiKaydet(rehinDetayBilgi.TerkinIslem);

                                    if (terkinIslemBilgiKayitEdildiMi = true && !islemBilgiDao.YevmiyeBilgiKayitliMi(rehinDetayBilgi.TerkinIslem.Yevmiye))
                                    {
                                        bool terkinYevmiyeBilgiKayitEdildiMi = islemBilgiDao.YevmiyeBilgiKaydet(rehinDetayBilgi.TerkinIslem.Yevmiye);
                                    }
                                }
                            }
                        }
                    }

                    return sonuc;
                }
            }
        }

        public bool RehinMiktarBilgiKaydet(RehinMiktarBilgi rehinMiktarBilgi, decimal rehinBilgiID)
        {
            bool sonuc;
            using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["TakbisBilgiSorguLogConnection"].ToString()))
            {
                using (SqlCommand cmd = new SqlCommand())
                {
                    con.Open();
                    SqlTransaction transaction = con.BeginTransaction("trans");
                    try
                    {
                        cmd.CommandText = @"insert into RehinMiktarBilgi with(updlock) (RehinMiktarBilgiID,RehinBilgiID,HissedarID,KayitTarih) values (@RehinMiktarBilgiID,@RehinBilgiID,@HissedarID,GETDATE())";

                        if (rehinMiktarBilgi.RehinMiktarBilgiID != null)
                            cmd.Parameters.Add("@RehinMiktarBilgiID", rehinMiktarBilgi.RehinMiktarBilgiID);
                        else
                            cmd.Parameters.Add("@RehinMiktarBilgiID", DBNull.Value);

                        if (rehinBilgiID != null)
                            cmd.Parameters.Add("@RehinBilgiID", rehinBilgiID);
                        else
                            cmd.Parameters.Add("@RehinBilgiID", DBNull.Value);

                        if (rehinMiktarBilgi.Hissedar != null)
                            cmd.Parameters.Add("@HissedarID", rehinMiktarBilgi.Hissedar.HissedarID);
                        else
                            cmd.Parameters.Add("@HissedarID", DBNull.Value);

                        cmd.Connection = con;
                        cmd.Transaction = transaction;
                        cmd.ExecuteScalar();
                        transaction.Commit();
                        sonuc = true;
                    }
                    catch (Exception ex)
                    {
                        transaction.Rollback();
                        sonuc = false;
                        using (ExceptionLogDao el = new ExceptionLogDao())
                        {
                            el.HataLogYaz(DateTime.Now.ToString() + "  " + ex.ToString());
                        }
                    }
                    finally
                    {
                        con.Close();
                        con.Dispose();
                        cmd.Dispose();
                    }
                    return sonuc;
                }
            }
        }

        public bool RehinKaydet(List<RehinBilgi> rehinBilgiList)
        {
            bool sonuc = false;
            try
            {
                foreach (RehinBilgi rehinBilgi in rehinBilgiList)
                {
                    //Döviz Kayıtlı Değil İse Kayıt Ediyor
                    using (DovizBilgiDao dovizBilgiDao = new DovizBilgiDao())
                    {
                        if (!dovizBilgiDao.DovizBilgiKayitliMi(rehinBilgi.Doviz))
                        {
                            bool doviKayitEdildiMi = dovizBilgiDao.DovizBilgiKaydet(rehinBilgi.Doviz);
                        }
                    }

                    //RehinBilgi Kayıt Ediyor
                    bool rehinBilgiKayitEdildiMi = RehinBilgiKaydet(rehinBilgi);

                    if (rehinBilgiKayitEdildiMi)
                    {
                        foreach (RehinDetayBilgi rehinDetayBilgi in rehinBilgi.RehinDetayList)
                        {
                            bool rehinDetayBilgiKaydet = RehinDetayBilgiKaydet(rehinDetayBilgi, rehinBilgi.RehinBilgiID);
                        }
                    }

                    if (rehinBilgiKayitEdildiMi)
                    {
                        foreach (RehinMiktarBilgi rehinMiktarBilgi in rehinBilgi.RehinMiktarList)
                        {
                            bool rehinMiktarBilgiKayitEdildiMi = RehinMiktarBilgiKaydet(rehinMiktarBilgi, rehinBilgi.RehinBilgiID);
                            using (HissedarDao hissedarDao = new HissedarDao())
                            {
                                bool hissedarKayitEdildiMi = hissedarDao.HissedarKaydet(rehinMiktarBilgi.Hissedar, TapuBolum.RehinAlacakli, rehinBilgi.RehinBilgiID);
                            }
                        }
                    }
                }
                sonuc = true;
            }
            catch (Exception ex)
            {
                using (ExceptionLogDao el = new ExceptionLogDao())
                {
                    el.HataLogYaz(DateTime.Now.ToString() + "  " + ex.ToString());
                }
            }
            return sonuc;
        }

        public List<RehinBilgi> GetirRehinBilgiZeminHisseIDDen(decimal zeminHisseID, TapuBolumDurum tapuBolumDurum, long kullaniciID)
        {
            List<RehinBilgi> rehinBilgiList = null;
            try
            {
                using (LogDao logDao = new LogDao())
                {
                    Stopwatch stopwatch = new Stopwatch();
                    stopwatch.Start();
                    rehinBilgiList = takbisServis.GetirRehinBilgiZeminHisseIDDen(zeminHisseID, tapuBolumDurum).ToList();
                    stopwatch.Stop();

                    Stopwatch stopwatch2 = new Stopwatch();
                    stopwatch2.Start();
                    if (rehinBilgiList.Count > 0)
                    {
                        bool rehinKayitEdildiMi = RehinKaydet(rehinBilgiList);
                    }
                    stopwatch2.Stop();
                    logDao.TakbisBilgiSorguLogKaydet("GetirRehinBilgiZeminHisseIDDen", null, rehinBilgiList, "ZeminHisseID = " + zeminHisseID.ToString() + ", TapuBolumDurum = " + tapuBolumDurum.ToString(), Convert.ToDecimal(stopwatch.ElapsedMilliseconds), Convert.ToDecimal(stopwatch2.ElapsedMilliseconds), kullaniciID);
                }
            }
            catch (Exception ex)
            {
                using (ExceptionLogDao el = new ExceptionLogDao())
                {
                    el.HataLogYaz(DateTime.Now.ToString() + "  " + ex.ToString());
                }
            }
            return rehinBilgiList;
        }

        public List<RehinBilgi> GetirRehinBilgiRehinIDDen(decimal rehinID, long kullaniciID)
        {
            List<RehinBilgi> rehinBilgiList = null;
            try
            {
                using (LogDao logDao = new LogDao())
                {
                    Stopwatch stopwatch = new Stopwatch();
                    stopwatch.Start();
                    rehinBilgiList = takbisServis.GetirRehinBilgiRehinIDDen(rehinID).ToList();
                    stopwatch.Stop();

                    Stopwatch stopwatch2 = new Stopwatch();
                    stopwatch2.Start();
                    if (rehinBilgiList.Count > 0)
                    {
                        bool rehinKayitEdildiMi = RehinKaydet(rehinBilgiList);
                    }
                    stopwatch2.Stop();
                    logDao.TakbisBilgiSorguLogKaydet("GetirRehinBilgiRehinIDDen", null, rehinBilgiList, "RehinID = " + rehinID.ToString(), Convert.ToDecimal(stopwatch.ElapsedMilliseconds), Convert.ToDecimal(stopwatch2.ElapsedMilliseconds), kullaniciID);
                }
            }
            catch (Exception ex)
            {
                using (ExceptionLogDao el = new ExceptionLogDao())
                {
                    el.HataLogYaz(DateTime.Now.ToString() + "  " + ex.ToString());
                }
            }
            return rehinBilgiList;
        }

        public List<RehinBilgi> GetirRehinBilgiKisiTipKisiIDden(MalikTip kisiTip, decimal kisiID, TapuBolumDurum tapuBolumDurum, BolgeTip bolgeTip, decimal bolgeID, long kullaniciID)
        {
            List<RehinBilgi> rehinBilgiList = null;
            try
            {
                using (LogDao logDao = new LogDao())
                {
                    Stopwatch stopwatch = new Stopwatch();
                    stopwatch.Start();
                    rehinBilgiList = takbisServis.GetirRehinBilgiKisiTipKisiIDden(kisiTip, kisiID, tapuBolumDurum, bolgeTip, bolgeID).ToList();
                    stopwatch.Stop();

                    Stopwatch stopwatch2 = new Stopwatch();
                    stopwatch2.Start();
                    if (rehinBilgiList.Count > 0)
                    {
                        bool rehinKayitEdildiMi = RehinKaydet(rehinBilgiList);
                    }
                    stopwatch2.Stop();
                    logDao.TakbisBilgiSorguLogKaydet("GetirRehinBilgiKisiTipKisiIDden", null, rehinBilgiList, "KişiTip = " + kisiTip.ToString() + ", KişiID = " + kisiID.ToString() + ", TapuBolumDurum = " + tapuBolumDurum + ", BölgeTip = " + bolgeTip + ", BölgeID = " + bolgeID, Convert.ToDecimal(stopwatch.ElapsedMilliseconds), Convert.ToDecimal(stopwatch2.ElapsedMilliseconds), kullaniciID);
                }
            }
            catch (Exception ex)
            {
                using (ExceptionLogDao el = new ExceptionLogDao())
                {
                    el.HataLogYaz(DateTime.Now.ToString() + "  " + ex.ToString());
                }
            }
            return rehinBilgiList;
        }

        public void Dispose()
        {
        }
    }
}
